<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Moodle guest book block..
*
* @package block_moodlebook
* @copyright Konovalov Nikolay <konovalov.nk@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

global $CFG;
require_once ($CFG->dirroot . '/blocks/moodlebook/lib/moodlebook_forms.php');

/**
 * Класс для отображения сообщений и комментариев из базы данных в виде HTML-кода
 */
class generate_html {
    
    private $tblmessages;
    private $tblcomments;
    
    function __construct() {
        global $CFG;
        if (empty($CFG->msgtable)) {
            $this->tblmessages = 'block_moodlebook_messages';
        } else {
            $this->tblmessages = $CFG->msgtable;
        }
        if (empty($CFG->cmttable)) {
            $this->tblcomments = 'block_moodlebook_comments';
        } else {
            $this->tblcomments = $CFG->cmttable;
        }
    }

    /** 
     * Генерирует HTML-код для вывода сообщений гостевой книги с комментариями
     * 
     * Подключается к базе данных, получает список сообщений в порядке от новых
     * к старым, генерирует HTML-код для форм;
     * для каждого сообщения получает список комментариев в порядке от старых
     * к новым и выводит их сразу после сообщения, к которому они были сделаны
     * 
     * @access public
     * @return string html-строка с формами сообщениий и комментариев
     */
    public function show_guestbook_messages() {
        global $DB;
        $submitform = new moodlebook_submitform(null, array(
            'messageid' => 0,
            'commentid' => 0,
            'message' => 'Write your message here...',
            'author' => 'Anonymous',
            'action' => 'submitbutton'
        ));
        $messages = $DB->get_records($this->tblmessages, null, 'id DESC');
        ob_start();
        $submitform->display();
        foreach ($messages as $message) {
            //get comments
            $commentstomsg = $DB->get_records($this->tblcomments, array('messageid' => $message->id), 'id ASC');
            $msgform = new moodlebook_messageform(null, array(
                'messageid' => $message->id,
                'message'   => $message->text,
                'author'    => $message->author,
                'datetime'  => $message->datetime,
                'buttons'   => true));
            $msgform->display();
            // display comments:
            foreach ($commentstomsg as $commentary) {
                
                $cmtform = new moodlebook_commentform(null, array(
                    'messageid' => $message->id,
                    'commentid' => $commentary->id,
                    'message'   => $commentary->text,
                    'author'    => $commentary->author,
                    'datetime'  => $commentary->datetime,
                    'buttons'   => true));
                $cmtform->display();                
            }
        }
        $html = ob_get_contents();
        ob_end_clean();
        return $html;
    }
    
    /**
     * Генерация сообщения с номером $msgid и всех комментариев к нему
     * 
     * Через бд получает искомое сообщение и комментарии к нему,
     * генерирует HTML-код и возвращает его
     * 
     * @access public
     * @param integer $msgid номер сообщения, к которому необходимо отобразить комментарии
     * @return string html-строка с нужными формами
     */
    public function show_source_message_with_comments($msgid) {
        global $DB;
        $message = $DB->get_record($this->tblmessages, array('id' => $msgid));
        ob_start();
        //get comments
        $commentstomsg = $DB->get_records($this->tblcomments, array('messageid' => $message->id), 'id ASC');
        $msgform = new moodlebook_messageform(null, array(
            'messageid' => $message->id,
            'message'   => $message->text,
            'author'    => $message->author,
            'datetime'  => $message->datetime,
            'buttons'   => false));
        $msgform->display();
        // display comments:
        foreach ($commentstomsg as $commentary) {

            $cmtform = new moodlebook_commentform(null, array(
                'messageid' => $message->id,
                'commentid' => $commentary->id,
                'message'   => $commentary->text,
                'author'    => $commentary->author,
                'datetime'  => $commentary->datetime,
                'buttons'   => false));
            $cmtform->display();                
        }
        $html = ob_get_contents();
        ob_end_clean();
        return $html;        
    }

    /**
     * Генерирует и возвращает HTML-код сообщения, указанного в качестве аргумента функции
     * 
     * @access public
     * @param integer $msgid номер сообщения
     * @param boolean $buttons выводить ли кнопки Comment, Edit, Delete на форме
     * @return string html-строка с формой сообщения
     */
    public function show_message_by_id($msgid, $buttons=TRUE) {
        global $DB;
        $message = $DB->get_record($this->tblmessages, array('id' => $msgid));
        ob_start();
        $msgform = new moodlebook_messageform(null, array(
            'messageid' => $message->id,
            'message'   => $message->text,
            'author'    => $message->author,
            'datetime'  => $message->datetime,
            'buttons'   => $buttons));
        $msgform->display();
        $html = ob_get_contents();
        ob_end_clean();
        return $html;        
    }

    /**
     * Генерирует и возвращает HTML-код формы отправки/редактирования сообщений/комментариев
     * 
     * @access public
     * @param integer $msgid номер сообщения, к которому сделан комментарий
     * @param integer $cmtid номер комментария
     * @param string $action вид действия:
     *     comment - комментирование сообщения, требуется $msgid и $cmtid
     *     editcmt - редактирование комментария, требуется $msgid и $cmtid
     *     editmsg - редактирование сообщения, требуется $msgid
     *     submitbutton - форма отправки сообщения
     * @return string html-строка с формой
     */
    public function show_submit_form($msgid=0, $cmtid=0, $action='sendmsg') {
        global $DB;
        switch ($action) {
            case 'editmsg':
                $message = $DB->get_record($this->tblmessages, array('id' => $msgid));
                break;

            case 'editcmt':
                $message = $DB->get_record($this->tblcomments, array('id' => $cmtid, 'messageid' => $msgid));
                break;

            default:
                $message = new stdClass();
                $message->text = 'Enter your message here...';
                $message->author = 'Anonymous';           
                break;
        }
        ob_start();
        $submitform = new moodlebook_submitform(null, array(
            'messageid' => $msgid,
            'commentid' => $cmtid,
            'message' => $message->text,
            'author' => $message->author,
            'action' => $action
        ));
        $submitform->display();
        $html = ob_get_contents();
        ob_end_clean();
        return $html;        
    }

    /**
     * Генерирует и возвращает HTML-код комментария, указанного в качестве аргумента функции
     * 
     * @access public
     * @param integer $msgid номер сообщения, к которому сделан комментарий
     * @param integer $cmtid номер комментария
     * @param boolean $buttons выводить ли кнопки Comment, Edit, Delete на форме
     * @return string html-строка с формой комментария
     */
    public function show_commentary_by_id($msgid, $cmtid, $buttons) {
        global $DB;
        $comment = $DB->get_record($this->tblcomments, array('id' => $cmtid, 'messageid' => $msgid));
        ob_start();
        $cmtform = new moodlebook_commentform(null, array(
            'commentid' => $comment->id,
            'messageid' => $comment->messageid,
            'message'   => $comment->text,
            'author'    => $comment->author,
            'datetime'  => $comment->datetime,
            'buttons'   => $buttons));
        $cmtform->display();
        $html = ob_get_contents();
        ob_end_clean();
        return $html;
    }

}
